import axios from 'axios';

// 创建API实例，不设置基础URL，让代理处理
const api = axios.create({
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json',
  },
});

// 请求拦截器
api.interceptors.request.use(
  (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      // 确保token格式正确 (Bearer token)
      config.headers.Authorization = `Bearer ${token}`;
      console.log('发送请求携带token:', token);
    }
    return config;
  },
  (error) => {
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  (response) => {
    console.log('API响应:', response.config.url, response.data);
    
    // 后端统一返回格式 {code: 2000, message: "success", data: {}}
    const respData = response.data;
    
    // 如果是登录接口，直接从响应中提取token
    if (response.config.url === '/teacher/login' && respData.code === 2000) {
      if (respData.data?.token) {
        localStorage.setItem('token', respData.data.token);
        if (respData.data.teacher) {
          localStorage.setItem('teacher', JSON.stringify(respData.data.teacher));
        }
      }
    }
    
    return respData;
  },
  (error) => {
    console.error('API错误:', error.response || error);
    
    if (error.response && error.response.status === 401) {
      // 未认证，清除本地token
      localStorage.removeItem('token');
      localStorage.removeItem('teacher');
      window.location.href = '/login';
      return Promise.reject(new Error('登录已过期，请重新登录'));
    }
    
    // 如果有响应数据，返回响应数据
    if (error.response && error.response.data) {
      return Promise.reject(error.response.data);
    }
    
    // 否则返回一个通用错误
    return Promise.reject({
      code: 500,
      message: error.message || '网络错误，请稍后重试'
    });
  }
);

export default api; 